package offical.baseClass

class AttributesClass {

    /**
     * 需要改变一个访问器的可见性或者对其注解，但是不需要改变默认的实现， 你可以定义访问器而不定义
     */
    var setVisibility: String = "可见"
        private set // 此 setter 是私有的并且有默认实现

    val setWithAnnotation: Boolean = false
        @Inject get // 用 Inject 注解此 getter

    /**
     * lateinit  不允许提供自定义get  set初始化构造器
     */
    lateinit var lateAttrs: String

    fun lateFun() {
        if (!::lateAttrs.isInitialized) {
            lateAttrs = "66"
        }
    }

    var name: String? = null

    //幕后字段 field
        get() {
            return "get$field"
        }
        set(value) {
            field = "set$value"
        }

}

annotation class Inject


fun main(args: Array<String>) {

    println(AttributesClass().name)

}
